﻿#define _CRT_SECURE_NO_WARNINGS
//struct PeoInfo
//{
//	char name[20];//姓名
//	char sex[5];//性别
//	int age;//年龄
//	char adder[20];//地址
//	char tel[11];//电话
//};
//struct tag
//{
//	member - list;
//}variable - list;
#include<stdio.h>
//struct
//{
//	int a;
//	char b;
//	double c;
//}x;
//struct
//{
//	int a;
//	char b;
//	double c;
//}s[5], * p;
//int main()
//{
//	p = &x;
//	return 0;
//}

//struct Node
//{
//	int data;
//	struct Node next;
//};
// 

////定义
//struct Stu
//{
//	char name[20];
//	int age;
//}s1;//声明类型的同时定义变量s1
//struct Stu s2;//定义结构体变量s2
////初始化
//struct Stu s3 = { "zhangsan", 20 };//定义的同时赋初值
////结构体嵌套初始化
//struct Node
//{
//	int data;
//	struct Stu p;
//	struct Node* next;
//}n1 = { 10, {"lisi", 26}, NULL}; //结构体嵌套初始化

////练习1
//struct S1
//{
//	char c1;
//	int i;
//	char c2;
//};
//printf("%d\n", sizeof(struct S1));
////练习2
//struct S2
//{
//	char c1;
//	char c2;
//	int i;
//};
//printf("%d\n", sizeof(struct S2));
////练习3
//struct S3
//{
//	double d;
//	char c;
//	int i;
//};
//printf("%d\n", sizeof(struct S3));
////练习4-结构体嵌套问题
//struct S4
//{
//	char c1;
//	struct S3 s3;
//	double d;
//};
//printf("%d\n", sizeof(struct S4));
//#include <stdio.h>
//#pragma pack(8)//设置默认对齐数为8
//struct S1
//{
//	char c1;
//	int i;
//	char c2;
//};
//#pragma pack()//取消设置的默认对齐数，还原为默认
//#pragma pack(1)//设置默认对齐数为1
//struct S2
//{
//	char c1;
//	int i;
//	char c2;
//};
//#pragma pack()//取消设置的默认对齐数，还原为默认
//int main()
//{
//	//输出的结果是什么？
//	printf("%d\n", sizeof(struct S1));
//	printf("%d\n", sizeof(struct S2));
//struct S
//{
//	int data[1000];
//	int num;
//};
//struct S s = { {1,2,3,4}, 1000 };
////结构体传参
//void print1(struct S s)
//{
//	printf("%d\n", s.num);
//}
////结构体地址传参
//void print2(struct S* ps)
//{
//	printf("%d\n", ps->num);
//}
//int main()
//{
//	print1(s);  //传结构体
//	print2(&s); //传地址
//	return 0;
//}
//printf("%d\n", sizeof(struct A));

//struct S
//{
//	char a : 3;
//	char b : 4;
//	char c : 5;
//	char d : 4;
//};
//int main()
//{
//	struct S s = { 0 };
//	s.a = 10;
//	s.b = 12;
//	s.c = 3;
//	s.d = 4;
//
//	return 0;
//}
//enum Day//星期
//{
//	Mon,
//	Tues,
//	Wed,
//	Thur,
//	Fri,
//	Sat,
//	Sun
//};
//enum Sex//性别
//{
//	MALE,
//	FEMALE,
//	SECRET
//}；
//enum Color//颜色
//{
//	RED,
//	GREEN,
//	BLUE
//};

//union Un
//{
//	int i;
//	char c;
//};
//int main()
//{
//	union Un un;
//	//// 下面输出的结果是一样的吗？
//	//printf("%d\n", &(un.i));
//	//printf("%d\n", &(un.c));
//	////下面输出的结果是什么？
//	//un.i = 0x11223344;
//	//un.c = 0x55;
//	//printf("%x\n", un.i);
//	printf("%d\n", sizeof(un.c));
//	printf("%d\n", sizeof(un.i));
//
//	return 0;
//}

union Un1
{
	char c[5];//5
	int i;//4
};
union Un2
{
	short c[7];//14
	int i;//4
};
int main()
{
	//下面输出的结果是什么？
	printf("%d\n", sizeof(union Un1));
	printf("%d\n", sizeof(union Un2));
	return 0;
}